package com.youlu.campus.service.activity;

import com.youlu.campus.base.interactive.vo.ActivitySignUpRequest;
import com.youlu.campus.entity.UserPO;
import com.youlu.campus.entity.UserParticipateActivityInfo;
import com.youlu.campus.entity.VO.res.UserJoinActivityRes;
import com.youlu.campus.entity.VO.res.UserQaRes;

import java.util.Date;
import java.util.List;

public interface UserParticipateActivityInfoService {
    /**
     * 获取用户已答题报名信息
     *
     * @param userId
     * @param activityId
     * @param activityQaInfoId 答题Id
     * @return
     */
    UserQaRes findUserQaByUserIdAndActivityId(String userId, String activityId, String activityQaInfoId);

    UserParticipateActivityInfo findBy(String activityId, String userId);

    UserParticipateActivityInfo findBy(String activityId, String userId, List<String> uids);

    UserParticipateActivityInfo findByMobile(String activityId, String mobile, Boolean joinStatus);

    //导出报名信息
    void exportUserParticipate();

    /**
     * 获取参与人数量
     *
     * @param activityId
     * @return
     */
    Long getJoinedCount(String activityId);

    /**
     * 累加报名人数
     *
     * @param activityId
     * @param incr
     */
    void increJoinedCount(String activityId, Long incr);


    void statisticsActivity(Long total);

    /**
     * 新增或者修改用户参加活动报名信息
     *
     * @param userParticipateActivityInfo
     */
    void saveOrUpdate(UserParticipateActivityInfo userParticipateActivityInfo);

    UserParticipateActivityInfo findByUserIdActivityId(String userId, String activityId);

    /**
     * 用户ID
     *
     * @param userId
     * @return
     */
    UserJoinActivityRes findJoinActivityByUserId(String userId);

    /**
     * 校验用户是否有报名信息如 学校姓名
     *
     * @param userId
     * @param activityId
     */
    void checkUserInfoSignUp(String userId, String activityId);

    /**
     * 修改用户报名信息
     *
     * @param activitySignUp
     */
    void updateUserInfo(ActivitySignUpRequest activitySignUp);

    void signUpActivity(ActivitySignUpRequest request, UserPO userPO);

    /**
     * 是否参与活动
     *
     * @param activityId
     * @param mobile
     * @return
     */
    boolean joined(String activityId, String mobile);

    /**
     * 移除用户参与活动报名信息
     *
     * @param userId
     * @param activityId
     */
    void removeSignUpByUserIdAndActivityId(String userId, String activityId);


    UserParticipateActivityInfo findJoinedUserByUserId(String userId);

    /**
     * 业务人员删除自己信息
     *
     * @param id
     * @param optUserId
     * @param optMobile
     */
    void deleteUserSignUp(String id, String optMobile, String optUserId);


    void initSignUpByActivityId(String activityId);


    void initUserJoined();

    /**
     * 获取用户最新一条报名信息
     *
     * @param userId
     * @return
     */
    UserParticipateActivityInfo getJoinedLastByUserId(String userId);

    /**
     * 更新活动报名数据redis缓存
     */
    void signUpInitCache(String activityId);

    /**
     * 领取电子证书查询主库
     *
     * @param userId
     * @param activityId
     * @return
     */
    UserParticipateActivityInfo findReceiveCaUserByUserIdActivityId(String userId, String activityId);

    /**
     * 更新打卡签到天数
     *
     * @param userId
     * @param activityId
     */
    void updateSignInDay(String userId, String activityId);

    /**
     * 更新活动报名人数
     *
     * @param date
     * @return
     */
    Boolean updateInvitedNum(Date date);

    /**
     * 删除用户报名信息
     *
     * @param userId
     * @param activityId
     */
    void deleteByUserIdAndActivityId(String userId, String activityId);
}
